package movepaint.utils;

import java.io.File;
import java.util.ArrayList;
import javax.swing.filechooser.*;

/**
 * Filtre de données utilisé pour n'accepté qu'une liste de format en particulier
 *  lors de l'ouverture/enregistrement d'un fichier.
 *
 * @author Paulino A.
 * @version 1.0
 **/
public class FiltreData extends FileFilter {
    //Description et extension acceptée par le filtre
    private String description;
    private ArrayList<String> extension;

    /**
     *  Constructeur à partir de la description et de l'extension acceptée
     *
     * @param description   Description de/des extension(s) acceptée(s).
     * @param extension     Liste des extensions acceptées
     */
    public FiltreData(String description, ArrayList<String> extension) {
        if (description == null || extension == null) {
            throw new NullPointerException("La description (ou extension) ne peut être null.");
        }
        this.description = description;
        this.extension = extension;
    }

    /**
     * Détermine si le fichier donné en argument est accepté par le filtre ou non.
     * @param file  Fichier à vérifier
     * @return  <b>true</b> si le fichier est accepté. <b>false</b> sinon.
     */
    public boolean accept(File file) {
        if (file.isDirectory()) {
            return true;
        }
        String nomFichier = file.getName().toLowerCase();

        // On vérifie que l'extension est correcte
        boolean isOk = false;
        for (String ext : extension) {
            if (nomFichier.endsWith(ext.toLowerCase())) {
                isOk = true;
            }
        }
        return isOk;
    }

    /**
     * Retourne la description des extensions acceptées par le filtre.
     * @return  Description des extensions acceptées par le filtre.
     */
    public String getDescription() {
        return description;
    }

    /**
     * Retourne l'extension du fichieer donné en argument.
     * @param f Le fichier a traiter
     * @return  L'extension du fichier <i>f</i>
     * @throws java.lang.Exception
     */
    public String getExtension(File f) throws Exception {
        String nomFichier = f.getName().toUpperCase();

        // On recherche l'extension du fichier
        for (String ext : extension) {
            if (nomFichier.endsWith(ext.toUpperCase())) {
                return ext.toUpperCase();
            }
        }
        throw new Exception("L'extension n'est pas supportée");
    }
}